package com.bw.controller;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.bw.common.GiteeUtils;
import com.bw.common.JwtUtils;
import com.bw.common.Md5Utils;
import com.bw.entity.User;
import com.bw.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import java.util.UUID;

@Controller
public class GiteeLoginController {

    @Autowired
    UserMapper userMapper;

    /**
     * gitee在调用这个方法  给这个方法传了一个code 叫做临时授权码
     * 接收临时授权码
     *
     * @return
     */
    @RequestMapping("/callbackCode.do")
    public String callbackCode(String code, HttpServletResponse response, Model model) {
        System.out.println("接收gitee发送过来的临时授权码" + code);
        // 根据临时授权码 获取token
        String tokenByCode = GiteeUtils.getAccessTokenByCode(code);
        System.out.println("获取到的token" + tokenByCode);
        // 发起http请求   （他们代码里的controller）
        JSONObject userInfoByToken = GiteeUtils.getGiteeUserInfoByToken(tokenByCode);

        System.out.println("获取到的用户信息" + JSON.toJSONString(userInfoByToken));

        // 执行注册
        Integer giteeId = userInfoByToken.getInteger("id"); // 把他们的id字段 当做 自己的gitee_id字段
        String nickName = userInfoByToken.getString("name"); // 把他们的name字段  当做 nick_name
        String avatarUrl = userInfoByToken.getString("avatar_url"); //头像
        String name = userInfoByToken.getString("login"); // 个人空间地址  把个人空间地址当做 自己系统的用户名

        // 判断之前是否已经注册过
        User userFromDB = userMapper.selectByName(name);

        if (userFromDB == null){
            // 执行注册

            User user = new User();
            user.setName(name);
            user.setGiteeId(giteeId);
            user.setAvatarUrl(avatarUrl);
            user.setNickName(nickName);
            String pwd = "123";
            String salt = UUID.randomUUID().toString().substring(0, 8);
            user.setSalt(salt);
            String md5String = Md5Utils.getMD5String(pwd + salt);
            user.setPassword(md5String);
            userMapper.addUser(user);

            // 加密用户信息 制作学生证
            String token = JwtUtils.createToken(user);
            Cookie cookie = new Cookie("token", token);
            response.addCookie(cookie);
        }else {
            //  更新一下用户的昵称和头像
            userFromDB.setNickName(nickName);
            userFromDB.setAvatarUrl(avatarUrl);

            userMapper.updateUserById(userFromDB);
            // 加密用户信息 制作学生证
            String token = JwtUtils.createToken(userFromDB);
            Cookie cookie = new Cookie("token", token);
            response.addCookie(cookie);
        }

        model.addAttribute("nickName",nickName);
        model.addAttribute("avatarUrl",avatarUrl);

        return "success";

    }
}
